const fs = require("fs");
const path = require("path");
// 封装自动引入 自动汇总（所有模块）的函数
function getMockModules() {
  return new Promise((resolve, reject) => {
    let modules = [];
    // 读取modules目录下的所有文件
    fs.readdir(path.resolve(__dirname, "./modules"), function (err, files) {
      // 1.如果读取错误 返回promise失败的结果
      if (err) {
        reject(err);
        return;
      }
      // 2.如果读取到文件
      // 遍历所有文件
      files.forEach((file) => {
        // 通过require函数加载文件的内容
        const module = require("./modules/" + file);
        //  console.log(module);
        //  console.log(111);
        // 将内容汇总到modules里面
        modules = [...modules, ...module];
      });
      // 返回promise成功的结果 modules
      return resolve(modules);
    });
  });
}

// 封装模块化mock
module.exports = async function setupMock(app) {
  const modules = await getMockModules();
  // 遍历modules 返回路由对象
  modules.forEach((module) => {
    app[module.method](module.url, function (req, res) {
      res.json(module.response);
    });
  });
};

// 封装2 ：自己定义路由对象 自动引入 自动汇总到模块中
/*
1.commonjs模块引入
2.fs.readdir(path, [callback(err,files)])
- 以异步的方式读取文件目录
  - path 目录路径
  - callback 回调，传递两个参数 err 和 files，files是一个包含 “ 指定目录下所有文件名称的” 数组
3.path.resolve([from…],to ) 
- 该方法将一些的 路径/路径段 解析为绝对路径
  - 将参数to位置的字符解析到一个绝对路径里，[from … ]为选填项，路径源
4.require()
  - require 是 node 用来加载并执行其它文件导出的模块的方法
*/
